home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2002 #3 / Amiga Plus CD - 2002 - No. 03.iso / AmiSoft / Dev / E / Eviled.lha / linelist.e < prev    next >
Encoding:
Text File  |  2003-02-04  |  1.5 KB  |  72 lines

  1. OPT MODULE
  2. OPT EXPORT
  3.  
  4. MODULE 'dos/dos'
  5.  
  6. RAISE "MEM" IF String()=NIL 
  7.  
  8. ->jan03: now works 100%!
  9.  
  10. EXPORT DEF tabdistance -> imported from main
  11.  
  12. PROC readAscii2Linelist(fh) HANDLE
  13.    DEF fib:fileinfoblock, ascii, line=0, m=NIL, width=0, maxwidth=NIL
  14.    DEF marray[1000]:ARRAY OF CHAR, array:PTR TO CHAR, t, linelist=NIL
  15.    DEF len
  16.    array := marray+999
  17.    marray[999] := NIL
  18.  
  19.    ExamineFH(fh, fib)
  20.    len := fib.size
  21.    m := NewR(4+len)
  22.    Read(fh, m, len)
  23.  
  24.    ascii := m + len - 1
  25.  
  26.    WHILE len
  27.       IF ascii[] = 10
  28.          t := String(width+6)
  29.          StrCopy(t, array)
  30.          linelist := Link(t, linelist)
  31.          maxwidth := Max(maxwidth, width)
  32.          width := 0
  33.          array := marray+999
  34.          line++
  35.       ELSEIF ascii[] = 9  -> replace tab with spaces now
  36.          FOR t := 1 TO tabdistance DO array[]-- := " "   
  37.          width := width + tabdistance            
  38.       ELSE
  39.          width++
  40.          array[]-- := ascii[]
  41.       ENDIF
  42.       ascii--
  43.       len--
  44.    ENDWHILE
  45.  
  46.    maxwidth := Max(maxwidth, width)
  47.    t := String(width+6)
  48.    StrCopy(t, array)
  49.    linelist := Link(t, linelist)
  50.    line++
  51.  
  52. EXCEPT DO
  53.    IF m THEN Dispose(m)
  54.    ReThrow()
  55. ENDPROC linelist, line, maxwidth
  56.  
  57. EXPORT PROC writeLinelistAscii(linelist, fh)
  58.    DEF buf
  59.    buf := String(16000)
  60.    WHILE linelist
  61.       IF (EstrLen(linelist)+1) >= (StrMax(buf)-EstrLen(buf))
  62.          Write(fh, buf, EstrLen(buf))
  63.          SetStr(buf, 0)
  64.       ENDIF
  65.       StrAdd(buf, linelist)
  66.       StrAdd(buf, '\n')
  67.       linelist := Next(linelist)
  68.    ENDWHILE
  69.    Write(fh, buf, EstrLen(buf))
  70.    Dispose(buf)
  71. ENDPROC
  72.